package com.example.springbooteasycode.utils.excel;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelAddBorders {

    public static void main(String[] args) throws IOException {
        // 加载现有的Excel文件或创建一个新的工作簿
        String filePath = "/Users/boykchen/Desktop/test.xls"; // 注意：XSSFWorkbook适用于.xlsx格式
        try (FileInputStream fis = new FileInputStream(filePath);
             XSSFWorkbook workbook = new XSSFWorkbook(fis)) {

            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);

            // 遍历每一行
            for (Row row : sheet) {
                boolean hasData = false;

                // 检查该行是否有数据
                for (Cell cell : row) {
                    if (cell.getCellType() != CellType.BLANK) {
                        hasData = true;
                        break;
                    }
                }

                // 如果有数据，则为该行的所有单元格应用边框样式
                if (hasData) {
                    for (Cell cell : row) {
                        // 保留原样式并添加边框
                        XSSFCellStyle originalStyle = (XSSFCellStyle) cell.getCellStyle();
                        XSSFCellStyle newStyle = workbook.createCellStyle();
                        cloneCellStyle(originalStyle, newStyle);
                        setBorder(newStyle); // 添加边框
                        cell.setCellStyle(newStyle);
                    }
                }
            }

            // 将更改保存回文件
            try (FileOutputStream fileOut = new FileOutputStream(filePath)) {
                workbook.write(fileOut);
            }
        }
    }

    /**
     * 复制单元格样式（除了边框）
     */
    private static void cloneCellStyle(XSSFCellStyle from, XSSFCellStyle to) {
        // 字体
        to.setFont(from.getFont());

        // 对齐方式
//        to.setAlignment(from.getAlignmentEnum());
//        to.setVerticalAlignment(from.getVerticalAlignmentEnum());

        // 填充模式和颜色
        to.setFillForegroundColor(from.getFillForegroundColor());
        to.setFillBackgroundColor(from.getFillBackgroundColor());
//        to.setFillPattern(from.getFillPatternEnum());

        // 其他可能需要复制的属性...
    }

    /**
     * 设置单元格边框样式
     */
    private static void setBorder(XSSFCellStyle cellStyle) {
        // 设置边框样式
        cellStyle.setBorderTop(BorderStyle.THIN);
        cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
        cellStyle.setBorderLeft(BorderStyle.THIN);
        cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
    }

    // =====会清除原来的样式=======
//    public static void main(String[] args) throws IOException {
//        // 加载现有的Excel文件或创建一个新的工作簿
//        String filePath = "/Users/boykchen/Desktop/test.xls";
//        try (FileInputStream fis = new FileInputStream(filePath);
//             XSSFWorkbook workbook = new XSSFWorkbook(fis)) {
//
//            // 获取第一个工作表
//            Sheet sheet = workbook.getSheetAt(0);
//
//            // 创建一个边框样式
//            XSSFCellStyle borderCellStyle = workbook.createCellStyle();
//            setBorder(borderCellStyle);
//
//            // 遍历每一行
//            for (Row row : sheet) {
//                boolean hasData = false;
//
//                // 检查该行是否有数据
//                for (Cell cell : row) {
//                    if (cell.getCellType() != CellType.BLANK) {
//                        hasData = true;
//                        break;
//                    }
//                }
//
//                // 如果有数据，则为该行的所有单元格应用边框样式
//                if (hasData) {
//                    for (Cell cell : row) {
//                        cell.setCellStyle(borderCellStyle);
//                    }
//                }
//            }
//
//            // 将更改保存回文件
//            try (FileOutputStream fileOut = new FileOutputStream(filePath)) {
//                workbook.write(fileOut);
//            }
//        }
//    }
//
//    /**
//     * 设置单元格边框样式
//     */
//    private static void setBorder(XSSFCellStyle cellStyle) {
//        // 设置边框样式
//        cellStyle.setBorderTop(BorderStyle.THIN);
//        cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
//        cellStyle.setBorderBottom(BorderStyle.THIN);
//        cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
//        cellStyle.setBorderLeft(BorderStyle.THIN);
//        cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
//        cellStyle.setBorderRight(BorderStyle.THIN);
//        cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
//    }
}
